/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import gestionnaire.GestionnaireClient;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modeles.Client;

        

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
 *
 * @author MAZID
 */
@WebServlet(name = "ServletGestionClient", urlPatterns = {"/ServletGestionClient"})
public class ServletGestionClient extends HttpServlet {
    @EJB
    private GestionnaireClient gestionnaireClient;

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String action = request.getParameter("action");
        Enumeration parametres = null;
        String forwardTo = null;
        //String page = request.getHeader("Referer");
        
        if(action!=null){
            if(action.equals("ajouterClient")){
                System.out.println("action recuperer");
            
            
            String nom = request.getParameter("nom").trim();
            String prenom = request.getParameter("prenom").trim();
            String mail = request.getParameter("mail").trim();
            String tel = request.getParameter("telephone").trim();
            String adres = request.getParameter("adresse").trim();
            String cp = request.getParameter("codePostal").trim();
            String ville = request.getParameter("ville").trim();
            String pays = request.getParameter("pays").trim();
            String login = request.getParameter("identifiant").trim();
            String pwd = request.getParameter("motDePasse").trim();
            String confirm = request.getParameter("confirmation").trim();
            //creation d'une collection de message d'erreurs
            List<String> erreurs = null;

            // On vérifie que le nom est renseigné
            if(nom.equals("") || nom==null)
            {
                    erreurs.add("Le paramètre [nom] est vide");
                    System.out.println("erreur de nom");
            }

            // On vérifie que le prénom est renseigné
            if(prenom.equals("") || prenom==null)
            {
                    erreurs.add("Le paramètre [prenom] est vide");
                    System.out.println("erreur de prenom");
            }

            // On vérifie que le mail est renseigné
            if(mail.equals("") || mail==null)
            {
                    erreurs.add("Le paramètre [mail] est vide");
                    System.out.println("mail vide");
            }
            else if(!mail.matches("^[\\d\\w]+([-_.]?[\\d\\w]+)+@[\\d\\w]+([-_.]?[\\w\\d])+\\.[a-z]{2,4}"))
            {
                    erreurs.add("Le paramètre [mail] contient une erreur de syntaxe");
                    System.out.println("erreur de syntaxe mail");
            }

            // On vérifie que l'adresse est renseignée
            if(adres.equals("") || adres==null)
            {
                    erreurs.add("Le paramètre [adresse] est vide");
                    System.out.println("erreur d'adresse");
            }

            // On vérifie que le code postal est renseigné
            if(cp.equals("") || cp==null)
            {
                    erreurs.add("Le paramètre [codePostal] est vide");
                    System.out.println("erreur de code postal");
            }

            // On vérifie que la ville est renseignée
            if(ville.equals("") || ville==null)
            {
                    erreurs.add("Le paramètre [ville] est vide");
                    System.out.println("erreur de ville");
            }

            // On vérifie que l'adresse est renseignée
            if(tel.equals("") || tel==null)
            {
                    erreurs.add("Le paramètre [telephone] est vide");
                    System.out.println("erreur de telephone");
            }

            // On vérifie que le pays est renseigné
            if(pays.equals("") || pays==null)
            {
                    erreurs.add("Le paramètre [pays] est vide");
                    System.out.println("erreur de pays");
            }

            // On vérifie que l'identifiant est renseigné
            if(login.equals("") || login==null)
            {
                    erreurs.add("Le paramètre [identifiant] est vide");
                    System.out.println("erreur de login");
            }
            else if(login.length()<5)
            {
                    erreurs.add("Le paramètre [identifiant] doit contenir 5 caractères minimum");
                    System.out.println("erreur de login trop petit");
            }

            // On vérifie que le mot de passe est renseigné
            if(pwd.equals("") || pwd==null)
            {
                    erreurs.add("Le paramètre [motDePasse] est vide");
                    System.out.println("erreur de password");
            }
            else if(pwd.length()<5)
            {
                    erreurs.add("Le paramètre [motDePasse] doit contenir 5 caractères minimum");
                    System.out.println("erreur de password trop petit");
            }

            // On vérifie que la confirmation est renseignée
            if(confirm.equals("") || confirm==null)
            {
                    erreurs.add("Le paramètre [confirmation] est vide");
                    System.out.println("erreur de confirmation");
            }
            if(!pwd.equals(confirm)){
                erreurs.add("Le deux mots de passe ne corespondent pas");
                System.out.println("erreur difference entre pwd");
            }
//            if(erreurs.size()>0)
//		{
//			// On ajoute tous les attributs du formulaire dans la requête
//			parametres=request.getParameterNames();
//			while (parametres.hasMoreElements()) 
//			{
//				String parametre=(String)parametres.nextElement();
//			    request.setAttribute(parametre,(String)request.getParameterValues(parametre)[0]);
//			}
//			
//			// On ajoute la collection d'erreurs
//			request.setAttribute("erreurs", erreurs);
//			
//			// On renvoie à la vue de création de compte
//                        forwardTo= "ServletFilm?action=renvoieErreurs";
//			//getServletContext().getRequestDispatcher("/vues/utilisateurs/ajoutercompte.jsp").forward(request,response);
//		}
		// Si aucune erreur, on ajoute le client à la base de données
//		else
//		{
                    System.out.println("pas d'erreur sur le formulaire");
			// on créé le client 
			boolean insert = gestionnaireClient.creerClient(login, pwd, nom, prenom,adres,cp,ville,pays,tel,mail);
			// On ajoute le client à la base de données, renvoi 1 si l'ajout s'est déroulé avec succès
			
			
			// On teste le code de retour pour afficher un message de succès ou d'erreur
			if(!insert)
			{		
                            System.out.println("message d'erreur sur l'insertion");
				// On renvoie à la page d'index utilisateur avec un message d'erreur
				response.sendRedirect("films");
			}
			else
			{	
                            System.out.println("pas d'erreur: insertion reussi avec succées");
				// On renvoie à la page d'index utilisateur avec un message de succes
				response.sendRedirect("films");
                    }
		//}
            
        }
    }
        RequestDispatcher dp = request.getRequestDispatcher(forwardTo);  
        dp.forward(request, response);
}
    
/**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
